cmake_minimum_required(VERSION 3.15.1)

project(com.gitee.xinghuo.clock LANGUAGES C CXX VERSION 1.7)

# 构建 spark-build-skeleton 的配置流程
include(cmake/SparkEnvConfig.cmake)           # 设置一些有关QT构建的开关
include(cmake/SparkMacrosConfig.cmake)        # 声明了一些 spark_ 开头的 macro 宏
# include(cmake/SparkFindQt5Config.cmake)       # 提供了 target_link_qt5 用于目标链接 qt5 的库
include(cmake/SparkFindQt6Config.cmake)       # 提供了 target_link_qt6 用于目标链接 qt6 的库
# include(cmake/SparkFindDtkConfig.cmake)       # 提供了 target_link_dtk 用于目标链接 dtk 的库
# include(cmake/SparkFindLibraries.cmake)       # 提供了基于 spark_ 宏生成的 target_link_<lib> 用于目标链接 <lib> 的库
include(cmake/SparkMacrosExtendConfig.cmake)  # 声明了一些 spark_ 开头的 macro 宏的扩展宏
include(cmake/SparkTranslatorConfig.cmake)    # 提供了 qt5 ts转qm 的操作，最终生成 SPARK_QM_TRANSLATIONS 变量用于构建可执行文件时参与编译

# set(QRC_SOURCES "")

## 构建 spark-build-skeleton 可执行文件 (用于显式展开 SparkBuild.cmake 内容，如果使用 SparkBuild.cmake 此处将需要注释)
# spark_add_executable_path(${PROJECT_NAME} src ${SPARK_SOURCES} ${SPARK_QM_TRANSLATIONS})
# target_link_qt5(${PROJECT_NAME})                 # 构建的目标需要使用 qt5 库
# target_link_dtk(${PROJECT_NAME})                 # 构建的目标需要使用 dtk 库
# target_link_notify(${PROJECT_NAME})              # 构建的目标需要使用 notify 库


## 子构建 spark-build-children
# add_subdirectory(src/spark-build-children)       # 传统构建方式，但已经可使用 spark_ 宏构建目标
# spark_add_executable_path(spark-build-children   # 约定目标及、源代码目录路径
#    src/spark-build-children)
# target_link_qt5(spark-build-children)            # 构建的目标需要使用 qt5 库

##
# 1. 构建一个动态库目标
# spark_add_shared_library(hello
#     src/libs/hello/hello.c
# )
# 或基于指定目录
# spark_add_shared_library_path(hello
#     src/libs/hello
# )

# 2. 构建一个(静态库)默认目标
# spark_add_shared_library(say
#     src/libs/say/say.c
# )
# 或基于指定目录
# spark_add_shared_library_path(say
#     src/libs/say
# )

# 3. 构建一个可执行目标，并链接使用
# spark_add_executable(main
#     src/main.c
# )
# target_link_hello(main)
# target_link_say(main)


##
# spark_add_library_realpaths
# 基于传入的项进行构建
    # 可接受的值为: 路径列表
    # 可接受的值为: 路径列表+依赖库A+依赖库B
# spark_add_library_realpaths(
#     src/libs/say
#     src/libs/hello
# )

# spark_add_executable_realpaths
# 基于传入的项进行构建
    # 可接受的值为: 可执行目标:路径列表
    # 可接受的值为: 可执行目标:路径列表+依赖库A+依赖库B
# spark_add_executable_realpaths(
#     main:src+say+hello
# )


## 一行一目标概念：集成(一行一库 + 一行一可执行目标)
# spark_add_target_realpaths <tag> [realpaths]
# realpaths:
    # s: static (t:src/libs/hello)
    # d: shared (t:src/libs/say)
    # t: target (t:<target>:src+hello+say)
# 参考
    # spark_add_executable_realpaths 
    # spark_add_shared_library_realpaths 
    # spark_add_library_realpaths 
spark_add_target_realpaths(ALL
    # s:src/libs/hello
    # d:src/libs/say
    t:clock:clock
)
#target_compile_definitions(note PRIVATE ICONDIR="/opt/apps/${PROJECT_NAME}/icon/")


##
# [Desktop Entry] For Linux 
include(cmake/SparkDesktopMacros.cmake)
# 内容默认应用名称: Name= 应与项目名称相同
spark_desktop_macros(
    # 应用名称: Name=
    "clock"
    # 应用名称: Name[zh_CN]=
    "时钟大师"
    # 应用说明: Comment=
    "时钟大师"
    # 应用类型: Type=
    "Application"
    # 执行程序: Exec=
    "/opt/apps/${PROJECT_NAME}/bin/clock"
    # 图标路径: Icon=
    "/opt/apps/${PROJECT_NAME}/icon/clock.png"
    # 应用分类: Categories=
    "Application"
    # MIME类型: MimeType=
)
install(FILES ${SPARK_DESKTOP_FILE}
    DESTINATION /usr/share/applications
)
install(FILES clock/clock.png
    DESTINATION /opt/apps/${PROJECT_NAME}/icon
)
install(TARGETS clock
    DESTINATION /opt/apps/${PROJECT_NAME}/bin
)

##
# [Graphviz] At 'builddeps', need 'dot' command
# include(cmake/SparkBuildGraphviz.cmake)


##
# [deb] For Linux(with dpkg)
# 注释行(使用方式)
find_package(SparkDebPackage PATHS ${CMAKE_SOURCE_DIR})
add_package_descript(cmake/spark-deb-package.descript)
